from rest_framework import serializers
from home.models import AxfGoods,AxfCart
from market.market_serializers import GoodsSerializer


class AddCartSerializer(serializers.Serializer):
    goodsid=serializers.CharField(required=True) # 原来是整型，但客户端传入时会变成字符串，所以这里用CharField()
    token=serializers.CharField()

    def validate_goodsid(self,value): # 数据库中要有当前商品，所以写验证器
        goods=AxfGoods.objects.filter(pk=int(value)).first() # 若数据库中没有当前商品，用filter()时不会报错；用get()时会触发DoesNotExist异常，捕获异常时写except 模型名.DoesNotExist as e
        if not goods:
            raise serializers.ValidationError('该商品不存在')
        return value

    def validate_token(self,value):
        if not value:
            raise serializers.ValidationError('token不存在')
        return value


class ListCartSerializer(serializers.ModelSerializer):
    c_goods=GoodsSerializer() # 使⽤关联对象的序列化器。因购物车中每个商品是唯一的，所以不加many=True。如果模型中两个模型有外键关系，如果需要序列化的模型中包含有其他关联对象，则对关联对象数据的序列化需要指明，如AxfCart模型中c_goods字段是外键，它关联AxfGoods模型。如果不加这句，返回给客户端的数据中，c_goods的值是商品id，加了后是商品的详细信息(因用GoodsSerializer序列化类对它序列化，这个序列化类就是对AxfGoods模型中的数据序列化)。

    class Meta:
        model=AxfCart
        fields='__all__'